[IA64] ia64 softirq clean ups.
authorawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 6 Jul 2006 14:30:17 +0000 (08:30 -0600)
committerawilliam@xenbuild.aw <awilliam@xenbuild.aw>
Thu, 6 Jul 2006 14:30:17 +0000 (08:30 -0600)
This is the counter part of the C/S
10565:53f552ad404234c457fdd62560c9e8b0ea976674
Xen softirq is only checked only before returning to domain context.
So that it's non-sense to check in_interrupt() and add/sub SOFTIRQ_OFFSET.

Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
xen/arch/ia64/linux-xen/entry.S
xen/arch/ia64/vmx/vmx_process.c
xen/arch/ia64/xen/domain.c
xen/arch/ia64/xen/irq.c

index e4fefe4d5c2e380bd3c97101afb3a70f1b02dd23..d80be440a349c97674fc86a404ddf0cb64331685 100644 (file)
@@ -892,7 +892,7 @@ GLOBAL_ENTRY(ia64_leave_kernel)
 #ifdef XEN
        ;;
 (pUStk) ssm psr.i
-(pUStk)    br.call.sptk.many b0=process_soft_irq
+(pUStk)    br.call.sptk.many b0=do_softirq
 (pUStk) rsm psr.i
     ;;
        alloc loc0=ar.pfs,0,1,1,0
index 03865107e96645002f92a14a30447bf4c58a4849..857195942b6fa20ae53495d37a4f31bfdc839ec5 100644 (file)
@@ -190,8 +190,7 @@ void leave_hypervisor_tail(struct pt_regs *regs)
     if (!is_idle_domain(d) ) { // always comes from guest
         extern void vmx_dorfirfi(void);
         struct pt_regs *user_regs = vcpu_regs(current);
-        if (local_softirq_pending())
-            do_softirq();
+        do_softirq();
         local_irq_disable();
 
         if (user_regs != regs)
index 8ffab2699240c378bb93a647939f346c6b41cb4c..aa99eb86da4bd6205e9b2de7aeee8f6c877bc1d3 100644 (file)
@@ -217,16 +217,14 @@ void continue_running(struct vcpu *same)
 
 static void default_idle(void)
 {
-       int cpu = smp_processor_id();
        local_irq_disable();
-       if ( !softirq_pending(cpu))
+       if ( !softirq_pending(smp_processor_id()) )
                safe_halt();
        local_irq_enable();
 }
 
 static void continue_cpu_idle_loop(void)
 {
-       int cpu = smp_processor_id();
        for ( ; ; )
        {
 #ifdef IA64
@@ -234,12 +232,10 @@ static void continue_cpu_idle_loop(void)
 #else
            irq_stat[cpu].idle_timestamp = jiffies;
 #endif
-           while ( !softirq_pending(cpu) )
+           while ( !softirq_pending(smp_processor_id()) )
                default_idle();
-           add_preempt_count(SOFTIRQ_OFFSET);
            raise_softirq(SCHEDULE_SOFTIRQ);
            do_softirq();
-           sub_preempt_count(SOFTIRQ_OFFSET);
        }
 }
 
index e190ae6ee7417a0b682bfbf6e24af477b921c83b..26af99a7e579f10b96f9086505f5687d654cce4f 100644 (file)
@@ -499,19 +499,6 @@ void irq_exit(void)
        sub_preempt_count(IRQ_EXIT_OFFSET);
 }
 
-/*
- * ONLY gets called from ia64_leave_kernel
- * ONLY call with interrupts enabled
- */
-void process_soft_irq(void)
-{
-       if (!in_interrupt() && local_softirq_pending()) {
-               add_preempt_count(SOFTIRQ_OFFSET);
-               do_softirq();
-               sub_preempt_count(SOFTIRQ_OFFSET);
-       }
-}
-
 // this is a temporary hack until real console input is implemented
 void guest_forward_keyboard_input(int irq, void *nada, struct pt_regs *regs)
 {